package partner_user_api

import (
	"fmt"
	"gitee.com/theegg/go-brick/app/controller/partner_api"
	"gitee.com/theegg/go-brick/app/model/user/users"
	"gitee.com/theegg/go-brick/app/service/app"
	"gitee.com/theegg/go-brick/app/service/help/cstruct"
	"github.com/gin-gonic/gin"
	"strconv"
)

// @title GetUserList
// @description 用户列表
func UserList(c *gin.Context) {
	// 检验参数
	var validaParams users.UserQueryParams
	if err := c.ShouldBind(&validaParams); err != nil {
		app.NewResponse(c).JsonReturn(false, "bind-json-"+err.Error(), nil)
		return
	}

	// 查询数据
	data, err := users.GetDataList(cstruct.StructToMap(validaParams))
	if err != nil {
		app.NewResponse(c).JsonI18nReturn(5011001, []interface{}{err.Error()}, data)
		return
	}

	data["lock_options"] = users.GetLockOptions()
	data["lock_level_options"] = users.GetLockLevelOptions()
	data["type_options"] = users.GetTypeOptions()

	app.NewResponse(c).JsonI18nReturn(5011000, nil, data)
	return
}

// @title UserAddByAdmin
// @description 用户添加 后台
func UserAddByAdmin(c *gin.Context) {

	// 校验参数
	var validaParams users.UserAddParams
	errBind := c.ShouldBind(&validaParams)
	if errBind != nil {
		app.NewResponse(c).JsonReturn(false, errBind.Error(), nil)
		return
	}

	// 当前登录管理员
	currentPau := partner_api.GetLoginPartnerAdminUser(c)

	// 添加用户
	validaParams.IP = c.ClientIP()
	errUpdate := users.AddUserByAdmin(validaParams, currentPau.Id)
	if errUpdate != nil {
		app.NewResponse(c).JsonReturn(false, errUpdate.Error(), nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

// @title UserTree
// @description 用户关系树
func UserTree(c *gin.Context) {

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

// @title UserFinance
// @description 用户资金流转
func UserFinance(c *gin.Context) {

	// 校验参数
	var validaParams users.UserFinanceParams
	errBind := c.ShouldBind(&validaParams)
	if errBind != nil {
		app.NewResponse(c).JsonReturn(false, errBind.Error(), nil)
		return
	}

	user, errGet := getTargetUserFromParams(c)
	if errGet != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}

	// 当前登录管理员
	currentPau := partner_api.GetLoginPartnerAdminUser(c)

	// 操作
	errDo := user.DoFinance(validaParams, currentPau.Id)
	if errDo != nil {
		app.NewResponse(c).JsonReturn(false, errDo.Error(), nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

// @title UserLock
// @description 用户冻结
func UserLock(c *gin.Context) {
	// 校验参数
	var validaParams users.UserLockParams
	errBind := c.ShouldBind(&validaParams)
	if errBind != nil {
		app.NewResponse(c).JsonReturn(false, errBind.Error(), nil)
		return
	}

	user, errGet := getTargetUserFromParams(c)
	if errGet != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}

	// 当前登录管理员
	currentPau := partner_api.GetLoginPartnerAdminUser(c)

	// 操作
	ip := c.ClientIP()
	errDo := user.DoLock(validaParams, currentPau.Id, ip)
	if errDo != nil {
		app.NewResponse(c).JsonReturn(false, errDo.Error(), nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

// @title UserModifyState
// @description 修改用户状态, 启用或者禁用
// @params *gin.Context
func UserModifyState(c *gin.Context) {
	user, errGet := getTargetUserFromParams(c)
	if errGet != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}

	ok, errModify := user.ModifyState()
	if errModify != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}

	if !ok {
		app.NewResponse(c).JsonReturn(false, "更新失败", nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

func UserDel(c *gin.Context) {
	user, errGet := getTargetUserFromParams(c)
	if errGet != nil {
		app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
		return
	}

	fmt.Println(user)

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

/** =========================== 辅助查询 ============================ **/
// @title getTargetUserFromParams
// @description 内置方法　通过参数id获取目标对象, 验证当前 登陆用户 是否可以操作 目标用户
func getTargetUserFromParams(c *gin.Context) (*users.Users, error) {
	id := c.PostForm("id")
	if id == "" {
		return nil, app.NewError("对不起, 管理员ID不能为空")
	}

	// ID 转换格式
	int64Id, errParse := strconv.ParseInt(id, 10, 64)
	if errParse != nil {
		return nil, app.NewError("对不起, 目标用户ID格式不正确")
	}

	// 获取用户
	targetUser, errTarget := users.GetItemById(int64Id)
	if errTarget != nil {
		return nil, app.NewError(errTarget)
	}

	return targetUser, nil
}
